/* 引入基本模块 */
const [
  fs,
  ora,
  puppeteer,
  FakeUseragent,
  Message
] = [
  require('fs'),
  require('ora'),
  require('puppeteer'),
  require('fake-useragent'),
  require('./tools/console.color')
]

const axios = require('axios')
const path = require('path')

/* 基本配置 */
const pageOption = {
  timeout: 0,
  /* 超时时间，为0则一直等待 */
  waitUntil: 'domcontentloaded' /* 等待页面已加载时停止 */
}
const targetWebsiteURL = ""
var processLoading = null

async function init() {
  /* 创建浏览器窗口 */
  Message.info('新建浏览器中...')
  const browser = await puppeteer.launch({
    headless: true /* 默认不显示浏览器窗口 */
  })

  /* 创建标签页 */
  Message.info('新建标签页中...')
  const [page] = await browser.pages()
  await page.setUserAgent(FakeUseragent())

  /* 进入目标页面 */
  Message.info('正在打开目标页面...')
  try {
    await page.goto(targetWebsiteURL, pageOption)
  } catch (err) {
    Message.error(err.message)
    return
  }

  processLoading = ora('0%').start();

  /* 目标DOM元素的选择器 */
  const targetElementSelector = ''

  /* 
    page.$$eval 的第二个参数为一个回调函数（默认参数为DOM元素列表），并将返回值作为promise的结果 
    这一步根据目标的DOM元素，筛选出需要的信息
  */
  const targetList = await page.$$eval(targetElementSelector, els => els.map(t => t.src))

  console.log(targetList)

  /* 关闭浏览器 */
  Message.info('浏览器已关闭')
  await browser.close()
}

/**
 * 根据图片链接下载图片
 * @param {string} url 图片地址
 */
function downloadIMG(url, savePath) {
  const name = url.replace(/http.*\//, '')
  axios.get(url, {
    responseType: 'arraybuffer'
  }).then(res => {
    fs.writeFile(path.join(savePath, name), res.data, 'binary', err => {
      if (err) {
        throw new Error(err.message)
      }
      Message.success('图片保存成功')
    })
  }).catch(err => {
    Message.error(err.message)
  })
}

// init()
